1 // --------------------------------------------------------------------------------------------------------------------
2 // <copyright file=
"WorkerMenu.cs" company="Exit Games GmbH">
3 // Part of: Photon Unity Networking
4 // </copyright>
5 // --------------------------------------------------------------------------------------------------------------------

6
7 using
System;
8 using
UnityEngine;
9 using
Random = UnityEngine.Random;
10
11 public
class WorkerMenu : MonoBehaviour
12 {
13     
public GUISkin Skin;
14     
public Vector2 WidthAndHeight = new Vector2(600,400);
15     
private string roomName = "myRoom";
16
17     
private Vector2 scrollPos = Vector2.zero;
18
19     
private bool connectFailed = false;
20
21     
public static readonly string SceneNameMenu = "DemoWorker-Scene";
22
23     
public static readonly string SceneNameGame = "DemoWorkerGame-Scene";
24
25     
private string errorDialog;
26     
private double timeToClearDialog;
27     
public string ErrorDialog
28     {
29         
get
30         {
31             
return errorDialog;
32         }
33         
private set
34         {
35             errorDialog =
value;
36             
if (!string.IsNullOrEmpty(value))
37             {
38                 timeToClearDialog = Time.time +
4.0f;
39             }
40         }
41     }
42
43     
public void Awake()
44     {
45         
// this makes sure we can use PhotonNetwork.LoadLevel() on the master client and all clients in the same room sync their level automatically
46         PhotonNetwork.automaticallySyncScene =
true;
47
48         
// the following line checks if this client was just created (and not yet online). if so, we connect
49         
if (PhotonNetwork.connectionStateDetailed == PeerState.PeerCreated)
50         {
51             
// Connect to the photon master-server. We use the settings saved in PhotonServerSettings (a .asset file in this project)
52             PhotonNetwork.ConnectUsingSettings(
"0.9");
53         }
54
55         
// generate a name for this player, if none is assigned yet
56         
if (String.IsNullOrEmpty(PhotonNetwork.playerName))
57         {
58             PhotonNetwork.playerName =
"Guest" + Random.Range(1, 9999);
59         }
60
61         
// if you wanted more debug out, turn this on:
62         
// PhotonNetwork.logLevel = NetworkLogLevel.Full;
63     }
64
65     
public void OnGUI()
66     {
67         
if (this.Skin != null)
68         {
69             GUI.skin =
this.Skin;
70         }
71
72         
if (!PhotonNetwork.connected)
73         {
74             
if (PhotonNetwork.connecting)
75             {
76                 GUILayout.Label(
"Connecting to: " + PhotonNetwork.ServerAddress);
77             }
78             
else
79             {
80                 GUILayout.Label(
"Not connected. Check console output. Detailed connection state: " + PhotonNetwork.connectionStateDetailed + " Server: " + PhotonNetwork.ServerAddress);
81             }
82             
83             
if (this.connectFailed)
84             {
85                 GUILayout.Label(
"Connection failed. Check setup and use Setup Wizard to fix configuration.");
86                 GUILayout.Label(String.Format(
"Server: {0}", new object[] {PhotonNetwork.ServerAddress}));
87                 GUILayout.Label(
"AppId: " + PhotonNetwork.PhotonServerSettings.AppID);
88                 
89                 
if (GUILayout.Button("Try Again", GUILayout.Width(100)))
90                 {
91                     
this.connectFailed = false;
92                     PhotonNetwork.ConnectUsingSettings(
"0.9");
93                 }
94             }
95
96             
return;
97         }
98
99         Rect content =
new Rect((Screen.width - WidthAndHeight.x)/2, (Screen.height - WidthAndHeight.y)/2, WidthAndHeight.x, WidthAndHeight.y);
100         GUI.Box(content,
"Join or Create Room");
101         GUILayout.BeginArea(content);
102
103         GUILayout.Space(
40);
104         
105         
// Player name
106         GUILayout.BeginHorizontal();
107         GUILayout.Label(
"Player name:", GUILayout.Width(150));
108         PhotonNetwork.playerName = GUILayout.TextField(PhotonNetwork.playerName);
109         GUILayout.Space(
158);
110         
if (GUI.changed)
111         {
112             
// Save name
113             PlayerPrefs.SetString(
"playerName", PhotonNetwork.playerName);
114         }
115         GUILayout.EndHorizontal();
116
117         GUILayout.Space(
15);
118
119         
// Join room by title
120         GUILayout.BeginHorizontal();
121         GUILayout.Label(
"Roomname:", GUILayout.Width(150));
122         
this.roomName = GUILayout.TextField(this.roomName);
123         
124         
if (GUILayout.Button("Create Room", GUILayout.Width(150)))
125         {
126             PhotonNetwork.CreateRoom(
this.roomName, new RoomOptions() { maxPlayers = 10 }, null);
127         }
128
129         GUILayout.EndHorizontal();
130
131         
// Create a room (fails if exist!)
132         GUILayout.BeginHorizontal();
133         GUILayout.FlexibleSpace();
134         
//this.roomName = GUILayout.TextField(this.roomName);
135         
if (GUILayout.Button("Join Room", GUILayout.Width(150)))
136         {
137             PhotonNetwork.JoinRoom(
this.roomName);
138         }
139
140         GUILayout.EndHorizontal();
141
142
143         
if (!string.IsNullOrEmpty(this.ErrorDialog))
144         {
145             GUILayout.Label(
this.ErrorDialog);
146
147             
if (timeToClearDialog < Time.time)
148             {
149                 timeToClearDialog =
0;
150                 
this.ErrorDialog = "";
151             }
152         }
153
154         GUILayout.Space(
15);
155
156         
// Join random room
157         GUILayout.BeginHorizontal();
158
159         GUILayout.Label(PhotonNetwork.countOfPlayers +
" users are online in " + PhotonNetwork.countOfRooms + " rooms.");
160         GUILayout.FlexibleSpace();
161         
if (GUILayout.Button("Join Random", GUILayout.Width(150)))
162         {
163             PhotonNetwork.JoinRandomRoom();
164         }
165         
166
167         GUILayout.EndHorizontal();
168
169         GUILayout.Space(
15);
170         
if (PhotonNetwork.GetRoomList().Length == 0)
171         {
172             GUILayout.Label(
"Currently no games are available.");
173             GUILayout.Label(
"Rooms will be listed here, when they become available.");
174         }
175         
else
176         {
177             GUILayout.Label(PhotonNetwork.GetRoomList().Length +
" rooms available:");
178
179             
// Room listing: simply call GetRoomList: no need to fetch/poll whatever!
180             
this.scrollPos = GUILayout.BeginScrollView(this.scrollPos);
181             
foreach (RoomInfo roomInfo in PhotonNetwork.GetRoomList())
182             {
183                 GUILayout.BeginHorizontal();
184                 GUILayout.Label(roomInfo.name +
" " + roomInfo.playerCount + "/" + roomInfo.maxPlayers);
185                 
if (GUILayout.Button("Join", GUILayout.Width(150)))
186                 {
187                     PhotonNetwork.JoinRoom(roomInfo.name);
188                 }
189
190                 GUILayout.EndHorizontal();
191             }
192
193             GUILayout.EndScrollView();
194         }
195
196         GUILayout.EndArea();
197     }
198
199     
// We have two options here: we either joined(by title, list or random) or created a room.
200     
public void OnJoinedRoom()
201     {
202         Debug.Log(
"OnJoinedRoom");
203     }
204
205
206     
public void OnPhotonCreateRoomFailed()
207     {
208         
this.ErrorDialog = "Error: Can't create room (room name maybe already used).";
209         Debug.Log(
"OnPhotonCreateRoomFailed got called. This can happen if the room exists (even if not visible). Try another room name.");
210     }
211
212     
public void OnPhotonJoinRoomFailed()
213     {
214         
this.ErrorDialog = "Error: Can't join room (full or unknown room name).";
215         Debug.Log(
"OnPhotonJoinRoomFailed got called. This can happen if the room is not existing or full or closed.");
216     }
217     
public void OnPhotonRandomJoinFailed()
218     {
219         
this.ErrorDialog = "Error: Can't join random room (none found).";
220         Debug.Log(
"OnPhotonRandomJoinFailed got called. Happens if no room is available (or all full or invisible or closed). JoinrRandom filter-options can limit available rooms.");
221     }
222
223     
public void OnCreatedRoom()
224     {
225         Debug.Log(
"OnCreatedRoom");
226         PhotonNetwork.LoadLevel(SceneNameGame);
227     }
228
229     
public void OnDisconnectedFromPhoton()
230     {
231         Debug.Log(
"Disconnected from Photon.");
232     }
233
234     
public void OnFailedToConnectToPhoton(object parameters)
235     {
236         
this.connectFailed = true;
237         Debug.Log(
"OnFailedToConnectToPhoton. StatusCode: " + parameters + " ServerAddress: " + PhotonNetwork.networkingPeer.ServerAddress);
238     }
239 }


--------------------------------------------------------------------------------------------------------------------

Part of: Photon Unity Networking

--------------------------------------------------------------------------------------------------------------------

this makes sure we can use PhotonNetwork.LoadLevel() on the master client and all clients in the same room sync their level automatically

the following line checks if this client was just created (and not yet online). if so, we connect

Connect to the photon master-server. We use the settings saved in PhotonServerSettings (a .asset file in this project)

generate a name for this player, if none is assigned yet

if you wanted more debug out, turn this on:

PhotonNetwork.logLevel = NetworkLogLevel.Full;

Player name

Save name

Join room by title

Create a room (fails if exist!)

this.roomName = GUILayout.TextField(this.roomName);

Join random room

Room listing: simply call GetRoomList: no need to fetchpoll whatever!

We have two options here: we either joined(by title, list or random) or created a room.




Trò chơi Tic-Tac-Toe, game đánh caro full source code 53.510 lượt xem

Gõ tìm kiếm nhanh...